from crewai import Agent
from crewai.tools import tool


# 首先定义工具（如果需要）
@tool
def calculate(expression: str) -> str:
    """执行科学计算"""
    try:
        # 安全考虑：在实际使用中应该用更安全的方式替代 eval
        allowed_chars = set('0123456789+-*/.() ')
        if all(c in allowed_chars for c in expression):
            result = eval(expression)
            return str(result)
        else:
            return "错误：表达式包含不安全字符"
    except Exception as e:
        return f"计算错误: {e}"

@tool
def ask_fruit_unit_price(fruit: str) -> str:
    """查询水果价格"""
    fruit = fruit.lower()
    price_map = {
        '苹果': '每千克10元',
        '香蕉': '每千克20元',
        '橙子': '每千克15元',
        '梨': '每千克12元'
    }
    for key, value in price_map.items():
        if key in fruit:
            return value
    return "每千克15元"

# 创建 Agent - 必须提供所有必填字段
research_agent = Agent(
    role="高级研究员",
    goal="准确回答用户关于价格和计算的问题",
    backstory="你是一个专业的数学和经济学研究员，擅长进行精确的计算和价格分析。",  # 必须提供 backstory
    tools=[calculate, ask_fruit_unit_price],  # 传入工具
    verbose=True,
    allow_delegation=True
)